package com.itheima.doudizhu3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

public class PokerGame {

    //创建一个集合用于存储牌
    static ArrayList<String> poker=new ArrayList<>();

    //创建map集合用来对应牌的号码和价值
    static HashMap<String,Integer> hm=new HashMap<>();

    static {
        //准备牌

        //将牌存入集合
        String[] color = {"♠", "♥", "♣", "♦"};
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        for (String n : number) {
            for (String c : color) {
                //将每一种组合添加到集合
                poker.add(c + n);
            }
        }
        //还有大小王
        poker.add(" 小王");
        poker.add(" 大王");

        //给每一张牌赋予各自的的价值
        hm.put("J",11);
        hm.put("Q",12);
        hm.put("K",13);
        hm.put("A",14);
        hm.put("2",15);
        hm.put("小王",16);
        hm.put("大王",17);
        //剩下的牌的号码就是它的价值，不需要刻意添加
    }

    public PokerGame(){
        //使用价值进行排序

        //洗牌
        Collections.shuffle(poker);


        //创建3个集合当成玩家用存牌，还有一个集合存底牌
        ArrayList<String> player1=new ArrayList<>();
        ArrayList<String> player2=new ArrayList<>();
        ArrayList<String> player3=new ArrayList<>();
        ArrayList<String> diPai=new ArrayList<>();

        //发牌
        //遍历集合，依次发牌
        for (int i = 0; i < poker.size(); i++) {
            //先发底牌
            if(i<=2){
                diPai.add(poker.get(i));
            }
            //再给每个人依次发牌
            if(i%3==0){
                player1.add(poker.get(i));
            }else if(i%3==1){
                player2.add(poker.get(i));
            }else{
                player3.add(poker.get(i));
            }
        }

        //看牌
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(diPai);
        //先排序，根据上面的价值进行排序
        mySort(player1);
        mySort(player2);
        mySort(player3);
        mySort(diPai);

        System.out.println("---------------");
        //排序完之后再看牌
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(diPai);

    }
    //排序
    public static void mySort(ArrayList<String> player){
        player.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //获取号码
                String num1 = o1.substring(1);
                String num2 = o2.substring(1);
                //通过号码在hm里面获取对应的价值并比较
                int i = getValue(num1)-getValue(num2);
                //获取花色
                String c1 = o1.substring(0, 1);
                String c2 = o2.substring(0, 1);
                //比较花色
                return i==0?c1.compareTo(c2):i;
            }
        });
    }

    //获取价值
    public static int getValue(String num){
        if(hm.containsKey(num)){
            //在hm里面标明了价值的，直接返回其价值
            return hm.get(num);
        }else{
            //没特意表明，就说明其号码就是它的价值
            return Integer.parseInt(num);
        }
    }
}
